package com.itheima.controller;

import com.itheima.domain.Employee;
import com.itheima.service.EmployeeService;
import com.itheima.vo.EmployeePageVo;
import com.itheima.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.sql.ResultSet;
import java.util.List;


// 1. 分析接口
// 2. 根据接口的URL前缀，确定你的controller名称
// 2.1 名称规则：前缀 + Controller
// 2.2 加注解 @RestController + @RequestMapping
// 3. 声明方法
// 3.1 用什么方法(GET,POST,PUT,DELETE)，用什么访问路径
// 3.2 有什么入参
// 3.2.1 Query类型的参数，这种参数:?key=value&key2=value2，处理方式：@RequestParam + 形参
// 3.2.2 Body 类型的参数，这种参数：JSON形式，处理方式 @RequestBody + 实体类DTO
// 3.2.3 REST 类型的参数，这种参数：/user/101，处理方式 @PathVirbale + 形参
// 3.3 有什么出参
// 3.3.1 定义一个VO去承载它，出参的所有字段，要包含在VO内，作为VO的成员变量
// 3.3.2 如果出参包含 code、msg、data等字段，那么要单独设计一个Result实体类，来承载它

// 4. controller > service > dao


@RestController
@RequestMapping("employee")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    // 1. 要传入page 和 pageSize
    // 2. 根据page和pageSize + 公式 (page-1)*pageSize 得到 limit 的两个参数
    // 3. 需要查询满足当前条件的数据总数，使用count(*)
    // 4. 将查询出来的数据 + 总的记录数 统一返回给前端

    @GetMapping("page")
    public Result getEmployeePage(@RequestParam(value = "name", required = false) String name,
                                  @RequestParam(value = "page", defaultValue = "1") Integer page,
                                  @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {

        // 页码：1,2,3,4,5
        // 每页显示条数：10,20,30

        // controller(page, pageSize) > service(page, pageSize) > mapper(offset, pageSize)
        // SELECT * FROM 表名 LIMIT 从第几条开始查(offset)，总共差几条(pageSize)
        List<Employee> employeeList = employeeService.getEmployeeList(name, page, pageSize);

        //SELECT count(*) FROM 表名
        Long employeeAmount = employeeService.getEmployeeAmount(name);

        EmployeePageVo vo = new EmployeePageVo();

        vo.setRecords(employeeList);
        vo.setSize(pageSize);
        vo.setTotal(employeeAmount);
        vo.setCurrent(page);

        return new Result(1, "查询成功", vo, null);
    }


    @GetMapping("/{id}")
    public Result getEmployeeById(@PathVariable String id) {
        Employee employeeById = employeeService.getEmployeeById(id);
        return new Result(200, "查询成功", employeeById, null);
    }

}
